package gw.com.android.utils;

import android.text.TextUtils;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

import gw.com.android.app.AppMain;
import gw.com.android.app.GTConfig;
import www.com.library.app.Logger;

/**
 * 文件管理类
 * Created by reeta.zou on 2017/5/25.
 */

public class CacheUtils {

    private static String mCachePath = AppMain.getApp().getFilesDir().getPath() + "/cache";

    public static String CACHE_HOME_DISCUSS_LIST_FILE = "discussList.json";//全部帖子的缓存文件

    //根据不同的查询类型，来设置不同的缓存文件名
    public static String CACHE_HOME_DISCUSS_LIST_FILE_ANALYST = "discussList_ANALYST.json";//分析师晒单
    public static String CACHE_HOME_DISCUSS_LIST_FILE_GUEST = "discussList_GUEST.json";//客户晒单
    public static String CACHE_HOME_DISCUSS_LIST_FILE_BEST = "discussList_BEST.json";//精华晒单
    public static String CACHE_HOME_DISCUSS_LIST_FILE_USER = "discussList_USER.json";//指定用户的晒单   --(查询分析师的观点用)
    public static String CACHE_HOME_DISCUSS_LIST_FILE_REPLY = "discussList.json";//指定用户的所有回复   -- (查询分析师评论用)
    public static String CACHE_HOME_DISCUSS_LIST_FILE_MY_POST = "discussList_myPost.json";//我的帖子

    public static String CACHE_ALL_ANALYST_LIST_FILE = "allAnalystList.json";//全部分析师的保存文件
    public static String CACHE_FOLLOWED_ANALYST_LIST_FILE = "followedAnalystList.json";//关注的分析师的保存文件

    public static String CACHE_HOME_COURSE_LIST_FILE = "courseList.json";//首页课程列表保存文件
    public static String CACHE_FIRST_COMING_2_2 = "first_coming_2_2.txt";//是否是第一次来到2.2版本,因为2.2的圈子有一个浮动气泡
    public static String CACHE_GUIDE_2_2 = "guide_2_2.txt";//圈子的引导页
    public static String CACHE_SHOW_NOTICE_TIP = "allow_show_notice_tips.txt";// 是否允许弹出打开
    public static String CACHE_FIRST_COMING_2_4 = "first_coming_2_4.txt";//是否第一次来到2.4(因为如果是第一次就会引导你来到手势设置界面，当然，设置可以跳过)
    private static String CACHE_GESTURE_PWD_INT = "gesture_gesture_int.txt";// 本机的手势密码，算了，暂时不与登录的账号发生关联；只针对本机；

    /**
     * 由于，手势密码 和账号存在绑定关系，所以，提供特别方法，统一获取
     * @return
     */
    public static String get_CACHE_GESTURE_PWD_INT() {
        return GTConfig.instance().mCurName + "_" + CacheUtils.CACHE_GESTURE_PWD_INT;
    }

    /**
     * 清空指定的文件
     *
     * @param fileName
     */
    public void clearConetent(String fileName) {
        writeFile(fileName, "");
    }


    /**
     * 保存文件到应用缓存
     *
     * @param fileName
     * @param mContent
     */
    public static void writeFile(String fileName, String mContent) {
        File fileDir = new File(mCachePath);
        File mFile = new File(mCachePath + "/" + fileName);
        Logger.e("writeFile::" + mFile.getPath());
        if (TextUtils.isEmpty(mContent)) {
            if (mFile.exists()) {
                mFile.delete();
            }
            return;
        }
        FileOutputStream fos = null;
        try {
            if (!fileDir.exists()) {
                fileDir.mkdirs();
            }
            if (!mFile.exists()) {
                Logger.e("创建文件！！！");
                mFile.createNewFile();
            }
            if (mContent.length() > 1) {
                Logger.e("保存文件到sd卡指定路径！！！" + mFile.getPath() + mFile.exists());
                fos = new FileOutputStream(mFile);
                fos.write(mContent.getBytes());
                fos.flush();// 刷新缓冲区
                fos.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 读取指定文件内容
     *
     * @param fileName
     * @return
     */
    public static String readFile(String fileName) {
        File mFile = new File(mCachePath + "/" + fileName);
        Logger.e("readFile::" + mFile.getPath());
        if (!mFile.exists()) {
            return "";
        }
        FileInputStream fis = null;
        InputStreamReader inputStreamReader = null;
        try {
            fis = new FileInputStream(mFile);
            inputStreamReader = new InputStreamReader(fis, "utf-8");
            BufferedReader reader = new BufferedReader(inputStreamReader);
            StringBuffer sb = new StringBuffer("");
            String line;
            try {
                while ((line = reader.readLine()) != null) {
                    sb.append(line);
                    sb.append("\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            return sb.toString();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (fis != null) {
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (inputStreamReader != null) {
                try {
                    inputStreamReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

        }
        return "";
    }

}
